package com.oj.api.auth;

import com.oj.api.auth.domain.AccountInfo;
import com.oj.api.auth.domain.HomeResourceInfo;
import com.oj.api.auth.domain.RoleInfo;
import com.oj.api.auth.domain.UserGroupInfo;
import com.oj.common.IFacadeLayer;
import com.oj.common.Response;
import org.springframework.http.ResponseEntity;

import javax.servlet.http.HttpServletResponse;

/**
 * 认证服务对外暴露的接口
 *
 * @author LX
 * @date 2017/7/8
 */
public interface IAuthFacade extends IFacadeLayer {

    /**
     * 账号登录
     *
     * @param accountInfo
     * @return
     */
    Response accountLogin(AccountInfo accountInfo);

    /**
     * 创建/修改用户组
     * @param userGroupInfo
     * @return
     */
    Response saveUserGroupInfo(UserGroupInfo userGroupInfo);

    /**
     * 根据指定条件查找用户组
     * @param userGroupInfo
     * @return
     */
    Response findUserGroupInfos(UserGroupInfo userGroupInfo);

    /**
     * 删除指定用户组
     * @param id
     * @return
     */
    Response deleteUserGroupInfoById(String id);

    /**
     * 查找指定用户组
     * @param code
     * @return
     */
    Response findUserGroupInfoByCode(String code);

    /**
     * 添加题目集至用户组
     * @param userGroupInfo
     * @return
     */
    Response addProblemSetToUserGroup(UserGroupInfo userGroupInfo);

    /**
     * 从用户组中删除题目集
     * @param userGroupInfo
     * @return
     */
    Response deleteProblemSetFromUserGroup(UserGroupInfo userGroupInfo);

    /**
     * 用户组添加邀请码
     * @param userGroupInfo
     * @return
     */
    Response addPinCodeToUserGroup(UserGroupInfo userGroupInfo);


    /**
     * 从用户组中删除邀请码
     * @param userGroupInfo
     * @return
     */
    Response deletePinCodeFromUserGroup(UserGroupInfo userGroupInfo);


    /**
     * 注册用户
     * @param accountInfo
     * @return
     */
    Response accountRegister(AccountInfo accountInfo);

    /**
     * 创建角色
     * @param roleInfo
     * @return
     */
    Response createRole(RoleInfo roleInfo);

    /**
     * 查找所有角色
     * @param roleInfo
     * @return
     */
    Response getRoles(RoleInfo roleInfo);

    /**
     * 更新角色
     * @param accountInfo
     * @return
     */
    Response updateRole(AccountInfo accountInfo);

    /**
     * 忘记密码发送邮件
     * @param accountInfo
     * @return
     */
    Response forgetPw(AccountInfo accountInfo);

    /**
     * 通过code查找信息
     * @param code
     * @return
     */
    Response findForgetInfoById(String code);


    /**
     * 添加用户至用户组
     * @param userGroupInfo
     * @return
     */
    Response addAccountInfoToUserGroup(UserGroupInfo userGroupInfo);

    /**
     * 添加用户至用户组
     * @param userGroupInfo
     * @return
     */
    Response deleteUserFromUserGroup(UserGroupInfo userGroupInfo);

    /**
     * 重置密码
     * @param accountInfo
     * @return
     */
    Response resetPassword(AccountInfo accountInfo);

    /**
     * 考试登录
     * @param accountInfo
     * @return
     */
    Response examLogin(AccountInfo accountInfo);

    /**
     * 绑定学号
     * @param accountInfo
     * @return
     */
    Response bindStudentNumber(AccountInfo accountInfo);

    /**
     * 拿到账户集合
     * @return
     */
    Response getAccountList(AccountInfo accountInfo);

    /**
     * 导出成绩
     * @param code
     * @return
     */
    ResponseEntity expertMark(String code);

    /**
    * 得到主页资源
     * @param homeResourceInfo
     * @return
     */
    Response getHomeResource(HomeResourceInfo homeResourceInfo);

    /**
     * 保存主页资源
     * @param homeResourceInfo
     * @return
     */
    Response saveHomeResource(HomeResourceInfo homeResourceInfo);

    /**
     * 将得分代码导出成压缩包
     * @param code
     * @return
     */
    ResponseEntity expertZip(String code,HttpServletResponse response);
}
